The present invention relates to industrial control systems, and in particular to industrial control systems where blocks of data are transferred between a central processor and one or more independent input/output (I/O) modules.
Industrial controllers are special purpose computers used for controlling industrial processes for manufacturing equipment. Under the direction of a stored program, the industrial controller examines a series of inputs reflecting the status of the controlled process and changes outputs affecting the control of the process. The inputs and outputs are most simply binary, that is "on" or "off", however, analog inputs and outputs, taking on values in a continuous range are also used. The binary inputs and outputs may be represented by single bits of data, the analog inputs and outputs may be represented by multiple bit data words.
In one common architecture for industrial controllers, a central processor executes a control program during which it reads and writes input and output values from and to an I/O image table. The I/O image table is a local memory that collects the values of all inputs and outputs of the control system and which may be rapidly accessed without the complex communication protocols needed to exchange large blocks of data directly with the I/O modules. Normally, separate circuitry, operating asynchronously to the processor refreshes the I/O image table by communicating with one or more I/O modules in a scanning process. Thus, the I/O image table simplifies and speeds the execution of the control program by the processor.
Most advanced industrial processors also include a provision for the block transfer of data which may or may not be I/O data. In a block transfer, the processor may halt further execution of the control program while a multi-word block of data is transferred to or from one or more I/O modules. Generally the block of data is received or transmitted at a time asynchronous to the execution of the internal program of the I/O modules. For this reason, the I/O modules may read from the area of memory receiving the transferred block of data prior to the transfer being complete. Similarly, in the case of data being transmitted from the I/O module, the I/O module may write to the area of memory from which the block of data is being transmitted, changing portions of that data not yet transmitted while failing to change data already transmitted in the block transfer.
Generally this is not a problem when the block of data represents I/O values which change relatively slowly relative to the block transfer rate and whose values have significance independently. The changing or premature use of such block data, however, can be a significant problem when the data represents configuration data such as, for example, the parameters used in a Proportional/Integral/Derivative control loop ("PID") in an I/O module. Such data if read prematurely (i.e., "new data" overwriting "old data" before the old data is utilized) could cause the I/O module to operate unpredictably.
It is known to use handshaking protocols so that two communicating devices can indicate whether a complete transfer of data has occurred. Unfortunately, such handshaking normally requires specialized circuitry supporting a handshaking communication protocol. Such a protocol can be time consuming when applied to all data in a high speed industrial controller intended for use in real-time control. Further, such circuitry is not provided in many controllers.
What is needed is a block transfer method that ensures the data is not used or changed during the transfer and that can be used with existing controllers without hardware modification.